from typing import List
import math
import random


def generate_heatmap(width: int, height: int, seed: int) -> List[List[float]]:
    random.seed(seed)
    data: List[List[float]] = []
    for y in range(height):
        row = []
        for x in range(width):
            v = (
                0.5
                + 0.3 * math.sin((x + seed % 13) * 0.2)
                + 0.2 * math.cos((y + seed % 7) * 0.25)
                + 0.1 * random.random()
            )
            row.append(max(0.0, min(1.0, v)))
        data.append(row)
    return data